home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
038a
/
qbtree45.zip
/
TEST45.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-01-03
|
9KB
|
270 lines
DECLARE FUNCTION ErrorReport$ (status%)
DECLARE FUNCTION DoInit% (dat0file$, key0file$, key1file$)
DECLARE FUNCTION GetKey% (waitfor%)
'{QBTREE version 4.50 short example 01/02/91}
REM $INCLUDE: 'c:\prg\qb\bi\qbtree45.bi'
DEFINT A-Z
CONST CREATE = -1, KEYMAX = 19
dat0file$ = "DAT0.45"
key0file$ = "KEY0.45"
key1file$ = "KEY1.45"
errc = DoInit(dat0file$, key0file$, key1file$)
IF NOT errc THEN
DO WHILE errc$ = ""
qkey$ = LEFT$(STR$(1& * RND * TIMER), 7)
qkey0$ = qkey$ + "0"
qkey1$ = qkey$ + "1"
qdat$ = "DATA/" + qkey$ + "/REC"
PRINT "Adding keyrecord:"; qkey0$; " data:"; qdat$;
errc$ = ErrorReport$(AddRecord(0, 0, qkey0$, qdat$))
IF errc$ = "" THEN
PRINT " Putting key:"; qkey1$;
errc$ = ErrorReport$(PutKey(1, 0, qkey1$))
END IF
IF errc$ <> "" THEN SLEEP 2
cnt = cnt + 1: IF cnt > KEYMAX THEN EXIT DO
LOOP
PRINT
INPUT "Press <Enter> to view keyed data", a$
CLS
errc = QBTreeVer(ver)
PRINT "QBTREE"; ver; "SAMPLE PROGRAM"
PRINT "STAT: STAT:"
PRINT "KEY0: KEY1:"
PRINT " DAT: DAT:"
errc = GetFirst(0, 0, qkey0$, qdat$)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
LOCATE 3, 6: PRINT qkey0$: LOCATE 4, 7: PRINT qdat$;
errc = GetPosition(0, recno&): PRINT recno&; " "
errc = GetFirst(1, 0, qkey1$, qdat$)
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(33 - LEN(t$))
LOCATE 3, 46: PRINT qkey1$: LOCATE 4, 47: PRINT qdat$;
errc = GetPosition(1, recno&): PRINT recno&; " "
kfile = 0
LOCATE 4, 1: PRINT "*": LOCATE 4, 41: PRINT " "
DO
akey = GetKey(0)
SELECT CASE akey
CASE 0
CASE 1072, 56 'up
kfile = 1
LOCATE 4, 1: PRINT " ": LOCATE 4, 41: PRINT "*"
CASE 1080, 50 'down
kfile = 0
LOCATE 4, 1: PRINT "*": LOCATE 4, 41: PRINT " "
CASE 1077, 54 'right
IF kfile = 0 THEN
errc = GetNext(0, 0, qkey0$, qdat$)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
LOCATE 3, 6: PRINT qkey0$: LOCATE 4, 7: PRINT qdat$;
errc = GetPosition(0, recno&): PRINT recno&; " "
ELSE
errc = GetNext(1, 0, qkey1$, qdat$)
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(33 - LEN(t$))
LOCATE 3, 46: PRINT qkey1$: LOCATE 4, 47: PRINT qdat$;
errc = GetPosition(1, recno&): PRINT recno&; " "
END IF
CASE 1075, 52 'left
IF kfile = 0 THEN
errc = GetPrev(0, 0, qkey0$, qdat$)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
LOCATE 3, 6: PRINT qkey0$: LOCATE 4, 7: PRINT qdat$;
errc = GetPosition(0, recno&): PRINT recno&; " "
ELSE
errc = GetPrev(1, 0, qkey1$, qdat$)
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(33 - LEN(t$))
LOCATE 3, 46: PRINT qkey1$: LOCATE 4, 47: PRINT qdat$;
errc = GetPosition(1, recno&): PRINT recno&; " "
END IF
CASE 85, 117 'U-pdate
IF qdat$ <> "" THEN
qdat$ = LEFT$(qdat$, LEN(qdat$) - 3) + "UPD"
errc = UpdateRecord(0, qdat$): IF errc THEN qdat$ = ""
IF kfile = 0 THEN
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
IF errc = 0 THEN LOCATE 3, 6: PRINT qkey0$: LOCATE 4, 7: PRINT qdat$
ELSE
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(33 - LEN(t$))
IF errc = 0 THEN LOCATE 3, 46: PRINT qkey1$: LOCATE 4, 47: PRINT qdat$
END IF
END IF
CASE 68, 100 'D-elete key (not data record)
IF kfile = 0 THEN
errc = DeleteKey(0, qkey0$)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
ELSE
errc = DeleteKey(1, qkey1$)
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(33 - LEN(t$))
END IF
CASE 4 '^D-elete key and record
IF kfile = 0 THEN
errc = GetPosition(1, recno&): PRINT recno&; " "
errc = DeleteRecord(0, 0, qkey0$)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
ELSE
errc = DeleteRecord(1, 0, qkey1$)
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(33 - LEN(t$))
END IF
CASE 70, 102 'F-lush
errc = FlushDataFile(0, 1)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
errc = FlushKeyFile(0, 1)
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
errc = FlushKeyFile(1, 1)
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(34 - LEN(t$))
CASE 16 'P-utkey (try at TOF or where last access was an error)
IF kfile = 0 THEN
errc = PutKey(0, 0, " E206TST")
t$ = ErrorReport$(errc): LOCATE 2, 7: PRINT t$ + SPACE$(34 - LEN(t$))
ELSE
errc = PutKey(1, 0, " E206TST")
t$ = ErrorReport$(errc): LOCATE 2, 47: PRINT t$ + SPACE$(34 - LEN(t$))
END IF
CASE 26 'Z-status
IF kfile = 0 THEN
errc = StatDataFile(0, recl, recs&, df)
errc = StatKeyFile(0, keyl, keys&, kf)
LOCATE 5, 2: PRINT "DST:"; recl; recs&; df; " "
LOCATE 6, 2: PRINT "KST:"; keyl; keys&; kf; " "
ELSE
errc = StatDataFile(0, recl, recs&, df)
errc = StatKeyFile(1, keyl, keys&, kf)
LOCATE 5, 42: PRINT "DST:"; recl; recs&; df; " "
LOCATE 6, 42: PRINT "KST:"; keyl; keys&; kf; " "
END IF
CASE 1 '^A
errc = GetDirect(0, 1, drec$)
LOCATE 7, 1: PRINT "Direct #1:"; drec$; ErrorReport$(errc)
CASE ELSE
END SELECT
LOOP UNTIL akey = 27
errc = CloseDataFile(0)
errc = CloseKeyFile(0)
errc = CloseKeyFile(1)
END IF
LOCATE 8, 1
PRINT "done."
END
FUNCTION DoInit (dat0file$, key0file$, key1file$)
'{create and open the files}
VIEW PRINT 1 TO 25: CLS
IF NOT CREATE THEN GOTO skip
PRINT "Creating data file #0: " + dat0file$
DO
errc = CreateDataFile(dat0file$, 16)
IF errc = 230 THEN KILL dat0file$
cnt = cnt + 1
LOOP WHILE errc = 230 AND cnt < 2
IF errc THEN DoInit = errc: EXIT FUNCTION
PRINT "Creating key file #0: " + key0file$
cnt = 0
DO
errc = CreateKeyFile(key0file$, 8)
IF errc = 230 THEN KILL key0file$
cnt = cnt + 1
LOOP WHILE errc = 230 AND cnt < 2
IF errc THEN DoInit = errc: EXIT FUNCTION
PRINT "Creating key file #1: " + key1file$
cnt = 0
DO
errc = CreateKeyFile(key1file$, 8)
IF errc = 230 THEN KILL key1file$
cnt = cnt + 1
LOOP WHILE errc = 230 AND cnt < 2
IF errc THEN DoInit = errc: EXIT FUNCTION
skip:
PRINT "Opening key and data files"
errc = OpenDataFile(dat0file$, 0)
t = StatDataFile(0, recl, recs&, bfile)
IF NOT errc THEN errc = OpenKeyFile(key0file$, 0)
t = StatKeyFile(0, keyl, keys&, bfile)
IF NOT errc THEN errc = OpenKeyFile(key1file$, 1)
t = StatKeyFile(1, keyl, keys&, bfile)
DoInit = errc
END FUNCTION
FUNCTION ErrorReport$ (status)
SELECT CASE status
CASE 0
t$ = ""
CASE IS < 200
t$ = "QB ERROR"
CASE 200
t$ = "KEY NOT FOUND"
CASE 201
t$ = "KEY ALREADY EXISTS"
CASE 202
t$ = "END OF FILE"
CASE 203
t$ = "TOP OF FILE"
CASE 204
t$ = "EMPTY FILE"
CASE 205
t$ = "DISK FULL"
CASE 206
t$ = "DATA POINTER INVALID"
CASE 210
t$ = "INTERNAL STACK OVERFLOW"
CASE 211
t$ = "FUNCTION NOT IMPLEMENTED"
CASE 219
t$ = "INVALID FILE NUMBER"
CASE 220
t$ = "INVALID DATA RECORD LENGTH"
CASE 221
t$ = "INVALID KEY LENGTH"
CASE 222
t$ = "FILE NOT FOUND"
CASE 223
t$ = "INVALID NULL KEY ASSIGNMENT"
CASE 224
t$ = "INVALID RECORD NUMBER"
CASE 225
t$ = "NO HANDLE FOR FLUSH"
CASE 226
t$ = "INVALID DRIVE"
CASE 228
t$ = "FILE NOT QBTREE COMPATIBLE"
CASE 229
t$ = "LOCK ALREADY IN FORCE"
CASE 230
t$ = "FILE ALREADY EXISTS"
CASE 231
t$ = "FILE NOT FOUND"
CASE 232
t$ = "GENERAL LOCK FAILURE"
CASE 207 TO 209, 212 TO 218, 227, 233 TO 255
t$ = "reserved error"
CASE ELSE
END SELECT
ErrorReport$ = t$
END FUNCTION
FUNCTION GetKey (waitfor)
DO
a$ = INKEY$
IF LEN(a$) = 1 THEN
a = ASC(a$)
ELSEIF LEN(a$) = 2 THEN
a = 1000 + ASC(RIGHT$(a$, 1))
ELSE
a = 0
END IF
IF a THEN LOCATE 6, 75: PRINT a
IF waitfor = FALSE THEN EXIT DO
LOOP UNTIL a
GetKey = a
END FUNCTION